// 导入koa框架
const Koa = require('koa')
// 导入处理POST请求的模块
const bodyParser = require('koa-bodyparser')
// 导入设置资源跨域共享的模块
const cors = require('koa2-cors')

// 导入视图管理的模块
const views = require('koa-views');
const consolidate = require('consolidate');
// 导入路由模块
const Router = require('koa-router');
const router = new Router();
// 导入文件系统模块
const fs = require('fs');
// 导入路径模块
const path = require('path');


// 创建koa应用程序
const app = new Koa();
// 导入创建静态资源目录的模块
const static = require('koa-static');
const cons = require('consolidate');
// 设置静态资源目录
// 例如：http://localhost:3001/1.txt
app.use(static(__dirname + '/public'))

// 使用bodyParser中间件解析请求体
app.use(bodyParser());

// 配置视图引擎
app.use(views('views', {
    extension: 'ejs',
    map: { html: 'ejs' },
    engineSource: consolidate
}));

// 使用cors中间件
app.use(cors({
    origin: function (ctx) {
        return '*'; // 允许所有域名
    },
    exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
    maxAge: 5, // 允许的最大时间
    credentials: true,
    allowMethods: ['GET', 'POST', 'DELETE'],
    allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}))

// 定义端口号
const port = 3001;

// 其他页面通过 router 加载
let urls = fs.readdirSync(__dirname + '/routes');
// console.log(urls)
urls.forEach((element) => {
    let module = require(path.join(__dirname + '/routes/' + element));
    // routes目录下面的每个文件负责一个特定的功能，分开管理
    // 通过 fs.readdirSync 读取 routes 目录下的所有文件名挂载到router上面
    router.use('/' + element.replace('.js', ''), module.routes(), module.allowedMethods());
})
app.use(router.routes());


// 监听端口
app.listen(port, () => {
    console.log("服务启动了...")
});